import { get, post, put, del } from '@/utils/request'
import { API_ENDPOINTS, replaceUrlParams } from '@/config/api'

/**
 * 帮助中心API
 */

// 获取帮助文章列表
export function getHelpArticles(params = {}) {
  return get(API_ENDPOINTS.HELP.ARTICLES, {
    page: params.page || 0,
    size: params.size || 20,
    category: params.category || '',
    keyword: params.keyword || '',
    sortBy: params.sortBy || 'createTime',
    sortOrder: params.sortOrder || 'desc'
  })
}

// 获取帮助文章详情
export function getHelpArticleDetail(articleId) {
  const url = replaceUrlParams(API_ENDPOINTS.HELP.ARTICLES + '/{id}', { id: articleId })
  return get(url)
}

// 获取帮助分类
export function getHelpCategories() {
  return get(API_ENDPOINTS.HELP.CATEGORIES)
}

// 搜索帮助文章
export function searchHelpArticles(keyword, params = {}) {
  return get(API_ENDPOINTS.HELP.SEARCH, {
    keyword: keyword,
    page: params.page || 0,
    size: params.size || 20,
    category: params.category || ''
  })
}

// 提交反馈
export function submitFeedback(feedbackData) {
  return post(API_ENDPOINTS.HELP.FEEDBACK, {
    type: feedbackData.type,
    title: feedbackData.title,
    content: feedbackData.content,
    contact: feedbackData.contact,
    attachments: feedbackData.attachments || []
  })
}

// 获取FAQ列表
export function getFAQList(params = {}) {
  return get(API_ENDPOINTS.HELP.FAQ, {
    category: params.category || '',
    keyword: params.keyword || ''
  })
}

// 获取操作指南
export function getOperationGuides(params = {}) {
  return get('/api/help/guides', {
    type: params.type || '',
    level: params.level || ''
  })
}

// 获取视频教程
export function getVideoTutorials(params = {}) {
  return get('/api/help/videos', {
    category: params.category || '',
    level: params.level || ''
  })
}

// 获取平台公告
export function getPlatformAnnouncements(params = {}) {
  return get('/api/help/announcements', {
    page: params.page || 0,
    size: params.size || 10,
    type: params.type || ''
  })
}

// 获取服务协议
export function getServiceAgreement() {
  return get('/api/help/agreement/service')
}

// 获取隐私政策
export function getPrivacyPolicy() {
  return get('/api/help/agreement/privacy')
}

// 获取商户入驻协议
export function getMerchantAgreement() {
  return get('/api/help/agreement/merchant')
}

// 提交在线客服咨询
export function submitCustomerService(consultData) {
  return post('/api/help/customer-service', {
    type: consultData.type,
    subject: consultData.subject,
    description: consultData.description,
    urgency: consultData.urgency,
    contact: consultData.contact
  })
}

// 获取客服会话历史
export function getCustomerServiceHistory(params = {}) {
  return get('/api/help/customer-service/history', {
    page: params.page || 0,
    size: params.size || 20,
    status: params.status || ''
  })
}

// 帮助文章分类枚举
export const HELP_CATEGORIES = {
  GETTING_STARTED: 'getting_started',    // 新手指南
  ORDER_PROCESS: 'order_process',        // 订单流程
  FINANCE_GUIDE: 'finance_guide',        // 财务管理
  SERVICE_GUIDE: 'service_guide',        // 服务管理
  ACCOUNT_SECURITY: 'account_security',  // 账户安全
  PLATFORM_RULES: 'platform_rules',     // 平台规则
  FAQ: 'faq',                           // 常见问题
  TECHNICAL_SUPPORT: 'technical_support' // 技术支持
}

// 帮助文章分类文本映射
export const HELP_CATEGORY_TEXT = {
  [HELP_CATEGORIES.GETTING_STARTED]: '新手指南',
  [HELP_CATEGORIES.ORDER_PROCESS]: '订单流程',
  [HELP_CATEGORIES.FINANCE_GUIDE]: '财务管理',
  [HELP_CATEGORIES.SERVICE_GUIDE]: '服务管理',
  [HELP_CATEGORIES.ACCOUNT_SECURITY]: '账户安全',
  [HELP_CATEGORIES.PLATFORM_RULES]: '平台规则',
  [HELP_CATEGORIES.FAQ]: '常见问题',
  [HELP_CATEGORIES.TECHNICAL_SUPPORT]: '技术支持'
}

// 反馈类型枚举
export const FEEDBACK_TYPES = {
  BUG_REPORT: 'bug_report',             // 问题反馈
  FEATURE_REQUEST: 'feature_request',   // 功能建议
  IMPROVEMENT: 'improvement',           // 改进建议
  COMPLAINT: 'complaint',               // 投诉建议
  OTHER: 'other'                        // 其他
}

// 反馈类型文本映射
export const FEEDBACK_TYPE_TEXT = {
  [FEEDBACK_TYPES.BUG_REPORT]: '问题反馈',
  [FEEDBACK_TYPES.FEATURE_REQUEST]: '功能建议',
  [FEEDBACK_TYPES.IMPROVEMENT]: '改进建议',
  [FEEDBACK_TYPES.COMPLAINT]: '投诉建议',
  [FEEDBACK_TYPES.OTHER]: '其他'
}

// 客服咨询类型枚举
export const CONSULT_TYPES = {
  ACCOUNT_ISSUE: 'account_issue',       // 账户问题
  ORDER_ISSUE: 'order_issue',           // 订单问题
  FINANCE_ISSUE: 'finance_issue',       // 财务问题
  TECHNICAL_ISSUE: 'technical_issue',   // 技术问题
  POLICY_QUESTION: 'policy_question',   // 政策咨询
  OTHER: 'other'                        // 其他
}

// 客服咨询类型文本映射
export const CONSULT_TYPE_TEXT = {
  [CONSULT_TYPES.ACCOUNT_ISSUE]: '账户问题',
  [CONSULT_TYPES.ORDER_ISSUE]: '订单问题',
  [CONSULT_TYPES.FINANCE_ISSUE]: '财务问题',
  [CONSULT_TYPES.TECHNICAL_ISSUE]: '技术问题',
  [CONSULT_TYPES.POLICY_QUESTION]: '政策咨询',
  [CONSULT_TYPES.OTHER]: '其他'
}

// 紧急程度枚举
export const URGENCY_LEVELS = {
  LOW: 'low',                           // 低
  NORMAL: 'normal',                     // 普通
  HIGH: 'high',                         // 高
  URGENT: 'urgent'                      // 紧急
}

// 紧急程度文本映射
export const URGENCY_LEVEL_TEXT = {
  [URGENCY_LEVELS.LOW]: '低',
  [URGENCY_LEVELS.NORMAL]: '普通',
  [URGENCY_LEVELS.HIGH]: '高',
  [URGENCY_LEVELS.URGENT]: '紧急'
}

// 获取帮助分类文本
export function getHelpCategoryText(category) {
  return HELP_CATEGORY_TEXT[category] || '其他'
}

// 获取反馈类型文本
export function getFeedbackTypeText(type) {
  return FEEDBACK_TYPE_TEXT[type] || '其他'
}

// 获取咨询类型文本
export function getConsultTypeText(type) {
  return CONSULT_TYPE_TEXT[type] || '其他'
}

// 获取紧急程度文本
export function getUrgencyLevelText(level) {
  return URGENCY_LEVEL_TEXT[level] || '普通'
}

// 创建反馈对象
export function createFeedback(data) {
  return {
    id: data.id || null,
    type: data.type || FEEDBACK_TYPES.OTHER,
    title: data.title || '',
    content: data.content || '',
    contact: data.contact || '',
    attachments: data.attachments || [],
    status: data.status || 'pending',
    createTime: data.createTime || new Date().toISOString(),
    updateTime: data.updateTime || new Date().toISOString()
  }
}

// 创建客服咨询对象
export function createConsultation(data) {
  return {
    id: data.id || null,
    type: data.type || CONSULT_TYPES.OTHER,
    subject: data.subject || '',
    description: data.description || '',
    urgency: data.urgency || URGENCY_LEVELS.NORMAL,
    contact: data.contact || '',
    status: data.status || 'pending',
    createTime: data.createTime || new Date().toISOString(),
    updateTime: data.updateTime || new Date().toISOString()
  }
}

// 验证反馈数据
export function validateFeedbackData(data) {
  const errors = []
  
  if (!data.type || !Object.values(FEEDBACK_TYPES).includes(data.type)) {
    errors.push('请选择反馈类型')
  }
  
  if (!data.title || data.title.trim().length === 0) {
    errors.push('请输入反馈标题')
  }
  
  if (!data.content || data.content.trim().length === 0) {
    errors.push('请输入反馈内容')
  }
  
  if (data.title && data.title.length > 100) {
    errors.push('反馈标题不能超过100个字符')
  }
  
  if (data.content && data.content.length > 1000) {
    errors.push('反馈内容不能超过1000个字符')
  }
  
  return {
    valid: errors.length === 0,
    errors
  }
}

// 验证咨询数据
export function validateConsultationData(data) {
  const errors = []
  
  if (!data.type || !Object.values(CONSULT_TYPES).includes(data.type)) {
    errors.push('请选择咨询类型')
  }
  
  if (!data.subject || data.subject.trim().length === 0) {
    errors.push('请输入咨询主题')
  }
  
  if (!data.description || data.description.trim().length === 0) {
    errors.push('请输入问题描述')
  }
  
  if (data.subject && data.subject.length > 100) {
    errors.push('咨询主题不能超过100个字符')
  }
  
  if (data.description && data.description.length > 1000) {
    errors.push('问题描述不能超过1000个字符')
  }
  
  return {
    valid: errors.length === 0,
    errors
  }
}
